/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufrn.adurn.architecture.dao;

import br.ufrn.adurn.domain.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Victor
 */
public class UsuarioDAO {

    private Connection connection;

    public UsuarioDAO() {
        this.connection = new ConnectionFactory().getConnection();
    }

    public void adiciona(Usuario usuario) {
        String sql = "INSERT INTO usuarios (nome, senha, is_admin) values (?,?,?)";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usuario.getNome());
            stmt.setString(2, usuario.getSenha());
            stmt.setBoolean(3, usuario.isAdmin());
            stmt.execute();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        JOptionPane.showMessageDialog(null, "Centro " + usuario.getNome() + " adicionado com sucesso", "", JOptionPane.INFORMATION_MESSAGE);
    }

    public List<Usuario> getLista() {
        try {
            List<Usuario> usuarios = new ArrayList<Usuario>();
            PreparedStatement stmt = this.connection.prepareStatement("select * from usuarios");
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setNome(rs.getString("nome"));
                usuario.setSenha(rs.getString("senha"));
                usuario.setIsAdmin(rs.getBoolean("is_admin"));
                usuarios.add(usuario);
            }
            rs.close();
            stmt.close();
            return usuarios;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void alteraSenha(Usuario usuario) {
        try {
            String sql = "update usuarios set senha=? where id=?";
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usuario.getSenha());
            stmt.setLong(2, usuario.getId());
            stmt.execute();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void remove(Usuario usuario) {
        try {
            PreparedStatement stmt = connection.prepareStatement("delete from usuarios where id=?");
            stmt.setLong(1, usuario.getId());
            stmt.execute();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public boolean validarUsuario(Usuario usuario) {
        try {
            PreparedStatement stmt = this.connection.prepareStatement("select * from usuarios where nome like \'" + usuario.getNome() + "\' and senha like \'" + usuario.getSenha() + "\'");
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                System.out.println("TUDO OK");
                return true;
            }

            rs.close();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return false;
    }

    public Usuario getUsuario(Usuario usuario) {
        Usuario novoUsuario = new Usuario();
        try {
            PreparedStatement stmt = this.connection.prepareStatement("select * from usuarios where nome like \'" + usuario.getNome() + "\' and senha like \'" + usuario.getSenha() + "\'");
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                novoUsuario.setNome(rs.getString("nome"));
                novoUsuario.setSenha(rs.getString("senha"));
                novoUsuario.setIsAdmin(rs.getBoolean("is_admin"));
            }
            rs.close();
            stmt.close();
            return novoUsuario;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
